#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QSplitter>
#include <QTextEdit>
#include <QWebEngineView>
#include <QTabWidget>
#include <QFileSystemWatcher>
#include <QTimer>
#include <QMutex>

#include "markdownrenderer.h"
#include "settingsmanager.h"
#include "historymanager.h"
#include "pluginmanager.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow() override;

    // 获取当前打开的文件路径
    QString currentFilePath() const;
    // 设置窗口大小和位置
    void setWindowSize(const QSize &size);
    void setWindowPosition(const QPoint &pos);

signals:
    // 当文件内容更改时发出
    void contentChanged(const QString &text);
    // 当文件保存时发出
    void fileSaved(const QString &path);

public slots:
    // 打开文件
    bool openFile(const QString &path = QString());
    // 新建文件
    void newFile();
    // 保存文件
    bool saveFile();
    // 另存为
    bool saveFileAs();
    // 关闭当前标签页
    void closeCurrentTab(int index = -1);
    // 切换预览模式
    void togglePreviewMode(bool enabled);
    // 切换主题
    void switchTheme(SettingsManager::Theme theme);
    // 应用设置更改
    void applySettings();

protected:
    void closeEvent(QCloseEvent *event) override;
    void dragEnterEvent(QDragEnterEvent *event) override;
    void dropEvent(QDropEvent *event) override;

private slots:
    // 处理编辑器文本更改
    void handleTextChanged();
    // 处理渲染完成
    void handleRenderingFinished(const QString &html);
    // 处理标签页更改
    void handleTabChanged(int index);
    // 处理文件系统更改
    void handleFileChanged(const QString &path);
    // 自动保存
    void autoSave();
    // 显示上下文菜单
    void showContextMenu(const QPoint &pos);

private:
    // 初始化UI
    void initUI();
    // 创建菜单栏
    void createMenus();
    // 创建工具栏
    void createToolbars();
    // 创建状态栏
    void createStatusBar();
    // 更新窗口标题
    void updateWindowTitle(const QString &path = QString());
    // 获取当前编辑器
    QTextEdit *currentEditor() const;
    // 获取当前预览视图
    QWebEngineView *currentPreview() const;
    // 加载编辑器样式
    void loadEditorStyle();
    // 检查文件是否已修改
    bool checkModified(int index = -1);

    // UI组件
    QTabWidget *m_tabWidget = nullptr;
    QSplitter *m_mainSplitter = nullptr;
    QFileSystemWatcher *m_fileWatcher = nullptr;
    QTimer *m_autoSaveTimer = nullptr;
    QMutex m_renderMutex;

    // 业务逻辑组件
    MarkdownRenderer *m_renderer = nullptr;
    SettingsManager *m_settings = nullptr;
    HistoryManager *m_historyManager = nullptr;
    PluginManager *m_pluginManager = nullptr;

    // 状态变量
    bool m_previewEnabled = true;
    bool m_isRendering = false;
};

#endif // MAINWINDOW_H